package com.geo.geoProject.client.util.geoLoc;


/// UTILISE deux methodes, la premiere est plus precise que la seconde.
/// I - [getPreciseLocAsync]                  Navigateur
/// II- [getClient(Latitude/Longitude)WithIP] Adresse IP (service Google)

public class ClientLocalization {

	
	private static double lat = 10 ;
	private static double lng = 1 ;
	private static ProcessWithLocation runFunction;

	/**
	 * recupere la localisation de maniere asynchrone, le processus peut etre null.
	 * rends faux lorsque le navigateur n'est pas compatible.
	 * ne requiert aucune inclusion d'autre modules (dans geolib.gwt.xml)
	 * @param r
	 * @return
	 */
	public static boolean getPreciseLocAsync(ProcessWithLocation r) {
		ClientLocalization.runFunction = r ;
		return getPreciseLocAsync_native() ;
	}
	
	
	private static native boolean getPreciseLocAsync_native() /*-{
	if (navigator.geolocation) {
  		$wnd.navigator.geolocation.getCurrentPosition(function(position) {
  		@com.geo.geoProject.client.util.geoLoc.ClientLocalization::setLatLng(DD)(position.coords.latitude,position.coords.longitude);
		});
		return true;
	} else {
		return false;
	}
}-*/;

	
	private static void setLatLng(double lat, double lng) {
		ClientLocalization.lat = lat ;
		ClientLocalization.lng = lng ;
		if (ClientLocalization.runFunction!=null) {
			runFunction.run(ClientLocalization.lat, ClientLocalization.lng) ;
		}
	}
	
	
	
	/// FONCTIONS DE SECOUR, localisation moins précise
	
	/**
	 * moins precis que la methode asynchrone getPositionAsync
	 * requiert, dans le fichier HTML l'inclusion de
	 *    <script type="text/javascript" src="https://www.google.com/jsapi?key=INSERT-YOUR-KEY"></script>
	 * astuce recuperee depuis http://code.google.com/apis/loader/#ClientLocation
	 * @return
	 */
	public static native double getClientLatitudeWithIP() /*-{
		if ($wnd.google) {
			if ($wnd.google.loader) {
				if ($wnd.google.loader.ClientLocation) {
					return Number($wnd.google.loader.ClientLocation.latitude) ;
				}
			}
		}
		return 0;
}-*/;

	/**
	 * moins precis que la methode asynchrone getPositionAsync
	 * requiert, dans le fichier HTML l'inclusion de
	 *    <script type="text/javascript" src="https://www.google.com/jsapi?key=INSERT-YOUR-KEY"></script>
	 * astuce recuperee depuis http://code.google.com/apis/loader/#ClientLocation
	 * @return
	 */
	public static native double getClientLongitudeWithIP() /*-{
		if ($wnd.google) {
			if ($wnd.google.loader) {
				if ($wnd.google.loader.ClientLocation) {
					return Number($wnd.google.loader.ClientLocation.longitude) ;
				}
			}
		}
		return 0;
}-*/;
	
}

